There are several well-known models for exchanging data between a plurality of computers connected together over a network. One of these models is known as the “client/server model”, in which a client computer (i.e., a client) sends a request for data to a server computer (i.e., a server) and waits for a response. Such a server typically has a relatively large bandwidth, processing power and storage capacity and is responsible for indexing, locating, retrieving, storing, caching and securing data. The server extracts the data from a relational database, for example, and transmits the requested data to the client in response to a client request. The server also ensures data integrity and enforces any access policy associated with the requested data.
The server is usually maintained by a “data-publisher”, which is configured to “publish” the data. Such publication may include extracting data, building documents to a size based on a request, building tables of the data with user-specified or request-driven ruling, borders, shading, colours, etc, automatic numbering of pages, adjustment of binding margins and table sizes, and formatting of numeric data, for example.
In contrast to servers, clients typically have relatively smaller bandwidth, processing power and storage capacity, and incorporate very simple and limited logic. The primary responsibility of a client is to initiate and complete “transactions” with the server. As such, clients are pure consumers of data published by the server. Users who wish to publish data must upload the data to a server in accordance with the client/server model.
Another well-known model for exchanging data between a plurality of computers connected together over a network is known as the “peer-to-peer model”, where the term peer refers to each of the computers connected together over the network. The peer-to-peer model is a fully distributed and decentralised model. The peers connected to a network are considered to be equal and there are no peers with special administrative roles. The peers are organised in a flat (i.e. non-hierarchical) structure and connections are formed in an ad-hoc manner. Any peer may “publish” data to, and “consume” data from, any other peer. Such peers are considerably more complex than the clients discussed above and often come in a variety of hardware and software configurations.
Still another model for exchanging data between a plurality of computers connected together over a network is known as a hybrid “peer-to-peer model”. In the hybrid peer-to-peer model, in addition to the peers, there is at least one server with a special administrative role. Essentially, in the hybrid peer-to-peer model the server facilitates communication between the peers. The music and movies web site, Napster™, is the best-known example of a software system that uses a hybrid peer-to-peer model. Napster™ uses a cluster of servers to index content so that a peer can find other peers having the content for which the peer is searching. One disadvantage of the hybrid peer-to-peer model is that in the absence of a central server, the quality of service may be reduced. For example, if the central server used by the Napster™ system was offline, then Napster™ peers find it difficult to access data on other Napster™ peers.
Some software applications (e.g. the Gnutella™ and the FreeNet™ application) allow for the sharing of files between peers without any centralised facilities requiring a server. However, none of these applications perform “proactive caching”. Proactive caching is the storage of extra copies of particular data on one or more peers before any users actually choose to download the data. In contrast, FreeNet™ caches data reactively. That is, if a peer (i.e., the requesting peer) requests data (e.g., an image) to be downloaded over a network from another peer (i.e., the downloading peer), then the data may thereafter be cached on one or more other peers of the network. The peers on which the data is cached are typically those peers in the path between the downloading peer and the requesting peer.
One known software application referred to as the Cooperative File System (CFS), allows distributed data storage without a central server. CFS uses a distributed hash table to determine where to store data and from where to retrieve the data. CFS also proactively caches data using such a distributed hash table. However, the disadvantage of CFS and other like systems is that a large amount of bandwidth is required to perform proactive caching.
Thus, a need clearly exists for an improved method of proactively caching data.